parser grammar CodigoXMLParser;

options {
  language = Java;
  tokenVocab = CodigoXMLLexer;
  backtrack = true;
}

@header {
  package practica8;
  import java.util.Hashtable;
}

@members {

    Hashtable variables = new Hashtable();
    
    private ArrayList<RecognitionException> errors = new ArrayList<RecognitionException>();
    public ArrayList<RecognitionException> getErrors() {
       return errors;
    }
    @Override
    public void reportError (RecognitionException e) {
       String msg = getErrorMessage(e, getTokenNames());
       System.err.println(msg);
       errors.add(e);
    }
}


elementos : (elemento)*;

elemento: a=apertura elementos c=cierre {if (a.compareTo(c) != 0)
                                            System.err.println("Mal cierre de etiqueta: \n" + 
                                                                "\t Etiqueta inicio: <" + a + "> \n" +
                                                                "\t Etiqueta final:  </" + c + ">");}
          |
          TEXTO;

apertura returns [String id = ""]: ABRIR_ANGULO i=IDENT CERRAR_ANGULO {id += i.getText();};

cierre returns [String id = ""]: ABRIR_ANGULO_FIN i=IDENT CERRAR_ANGULO {id += i.getText();};
